package fr.formation.entity;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * The Class Stagiaire.
 * 
 * @author stagiaire Class pour l'entite {@link Stagiaire}.
 */
public class Stagiaire {

    /** The Constant SDF. */
    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * L'identifiant du {@link Stagiaire}.
     */
    private Integer                       id;
    /**
     * Le nom de {@link Stagiaire}.
     */
    private String                        nom;
    /**
     * Le prenom de {@link Stagiaire}.
     */
    private String                        prenom;
    /**
     * L'adresse postale de {@link Stagiaire}.
     */
    private String                        adresse;
    /**
     * La date de naissance de {@link Stagiaire}.
     */
    private Date                          dateNaissance;

    /**
     * L'{@link Organisme} de formation du {@link Stagiaire}.
     */
    private Organisme                     organisme;

    /**
     * Gets the organisme.
     * 
     * @return the organisme
     */
    public Organisme getOrganisme() {
        return organisme;
    }

    /**
     * Sets the organisme.
     * 
     * @param pOrganisme
     *            the organisme to set
     */
    public void setOrganisme(Organisme pOrganisme) {
        organisme = pOrganisme;
    }

    /**
     * {@link Stagiaire}.
     */
    public Stagiaire() {
        super();
    }

    /**
     * Instantiates a new stagiaire.
     * 
     * @param pNom
     *            Nom du stagiaire.
     * @param pPrenom
     *            Prenom du stagiaire.
     * @param pAdresse
     *            Adresse du stagiaire.
     * @param pDateNaissance
     *            Date de naissance du stagiaire.
     */
    public Stagiaire(String pNom, String pPrenom, String pAdresse, Date pDateNaissance) {
        super();
        nom = pNom;
        prenom = pPrenom;
        adresse = pAdresse;
        dateNaissance = pDateNaissance;
    }

    /**
     * Gets the id.
     * 
     * @return the id
     */
    public Integer getId() {
        return id;
    }

    /**
     * Sets the id.
     * 
     * @param pId
     *            the id to set
     */
    public void setId(Integer pId) {
        id = pId;
    }

    /**
     * Gets the nom.
     * 
     * @return the nom
     */
    public String getNom() {
        return nom;
    }

    /**
     * Sets the nom.
     * 
     * @param pNom
     *            the nom to set
     */
    public void setNom(String pNom) {
        nom = pNom;
    }

    /**
     * Gets the prenom.
     * 
     * @return the prenom
     */
    public String getPrenom() {
        return prenom;
    }

    /**
     * Sets the prenom.
     * 
     * @param pPrenom
     *            the prenom to set
     */
    public void setPrenom(String pPrenom) {
        prenom = pPrenom;
    }

    /**
     * Gets the adresse.
     * 
     * @return the adresse
     */
    public String getAdresse() {
        return adresse;
    }

    /**
     * Sets the adresse.
     * 
     * @param pAdresse
     *            the adresse to set
     */
    public void setAdresse(String pAdresse) {
        adresse = pAdresse;
    }

    /**
     * Gets the date naissance.
     * 
     * @return the dateNaissance
     */
    public Date getDateNaissance() {
        return dateNaissance;
    }

    /**
     * Sets the date naissance.
     * 
     * @param pDateNaissance
     *            the dateNaissance to set
     */
    public void setDateNaissance(Date pDateNaissance) {
        dateNaissance = pDateNaissance;
    }

    /**
     * Instantiates a new stagiaire.
     * 
     * @param pId
     *            the id
     * @param pNom
     *            the nom
     * @param pPrenom
     *            the prenom
     * @param pAdresse
     *            the adresse
     * @param pDateNaissance
     *            the date naissance
     * @param pOrganisme
     *            the organisme
     */
    public Stagiaire(Integer pId, String pNom, String pPrenom, String pAdresse, Date pDateNaissance, Organisme pOrganisme) {
        super();
        id = pId;
        nom = pNom;
        prenom = pPrenom;
        adresse = pAdresse;
        dateNaissance = pDateNaissance;
        organisme = pOrganisme;
    }

    /**
     * Instantiates a new stagiaire.
     * 
     * @param pId
     *            the id
     * @param pNom
     *            the nom
     * @param pPrenom
     *            the prenom
     * @param pAdresse
     *            the adresse
     * @param pDateNaissance
     *            the date naissance
     * @param pOrganisme
     *            the organisme
     * @throws ParseException
     *             the parse exception
     */
    public Stagiaire(Integer pId, String pNom, String pPrenom, String pAdresse, String pDateNaissance, Organisme pOrganisme) throws ParseException {
        this(pId, pNom, pPrenom, pAdresse, SDF.parse(pDateNaissance), pOrganisme);
    }

    /**
     * Instantiates a new stagiaire.
     * 
     * @param pId
     *            the id
     * @param pNom
     *            the nom
     * @param pPrenom
     *            the prenom
     * @param pAdresse
     *            the adresse
     * @param pDateNaissance
     *            the date naissance
     */
    public Stagiaire(Integer pId, String pNom, String pPrenom, String pAdresse, Date pDateNaissance) {
        super();
        id = pId;
        nom = pNom;
        prenom = pPrenom;
        adresse = pAdresse;
        dateNaissance = pDateNaissance;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((adresse == null) ? 0 : adresse.hashCode());
        result = prime * result + ((dateNaissance == null) ? 0 : dateNaissance.hashCode());
        result = prime * result + ((nom == null) ? 0 : nom.hashCode());
        result = prime * result + ((organisme == null) ? 0 : organisme.hashCode());
        result = prime * result + ((prenom == null) ? 0 : prenom.hashCode());
        return result;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Stagiaire other = (Stagiaire) obj;
        if (adresse == null) {
            if (other.adresse != null)
                return false;
        } else if (!adresse.equals(other.adresse))
            return false;
        if (dateNaissance == null) {
            if (other.dateNaissance != null)
                return false;
        } else if (!dateNaissance.equals(other.dateNaissance))
            return false;
        if (nom == null) {
            if (other.nom != null)
                return false;
        } else if (!nom.equals(other.nom))
            return false;
        if (organisme == null) {
            if (other.organisme != null)
                return false;
        } else if (!organisme.equals(other.organisme))
            return false;
        if (prenom == null) {
            if (other.prenom != null)
                return false;
        } else if (!prenom.equals(other.prenom))
            return false;
        return true;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Stagiaire [id=" + id + ", nom=" + nom + ", prenom=" + prenom + ", adresse=" + adresse + ", dateNaissance=" + dateNaissance + ", organisme="
                + organisme + "]";
    }

}
